dseg segment dieci db 0Ah noper db ? mess db "Quale operazione vuoi eseguire? $",0Ah,0Dh,"$" mess_n db "Inserisci il numero: $" menu db "Il numero 1 rappresenta l'addizione ",0Dh,0Ah,"Il numero 2 rappresenta la sottrazione ",0dh,0ah,"Il numero 3 rappresenta la moltiplicazione ",0dh,0ah,"Il numero 4 rappresenta la divisione ",0dh,0ah,"$" mess_ris db "Il risultato Š: $" dseg ends sseg segment para stack 'stack' top dw 10 dup (?) sseg ends cseg segment assume ds:dseg, cs:cseg, ss:sseg ins_num proc ;funsione sull inserimento di un numero a 3 cifre MOV cx,3 MOV BX,0 LEA DX,mess_n MOV AH,09H INT 21H ciclo: MOV AH,01H INT 21H CMP AL,0DH JE fine PUSH AX MOV AX,BX MUL dieci MOV BX,AX POP AX SUB AL,30H MOV AH,0 ADD BX,AX LOOP ciclo fine: ret ins_num endp start: MOV AX,DSEG MOV DS,AX MOV DX,0 LEA DX,MENU ;vinene visualizzato il menù MOV AH,09H INT 21H LEA DX,MESS ;viene visualizzato il messaggio del operazione che si vuole effettuare MOV AH,09H INT 21H ;inserimento di un numero da tastiera MOV AH,01H INT 21H CMP AL,'1' ;se viene inserito 1 JE addi ;vai all'addizione CMP AL,'2' ;se viene inserito 2 JE sott ;vai alla sottrazione CMP AL,'3' ;se viene inserito 3 JE molt ;vai alla moltiplicazione CMP AL,'4' ;se viene inserito 4 JE divi ;vai alla divisione addi: CALL ins_num ;addizione PUSH BX CALL ins_num POP AX ADD AX,BX JMP fine1 sott: CALL ins_num ;sottrazione PUSH BX CALL ins_num POP AX SUB AX,BX JMP fine1 molt: CALL ins_num ;moltiplicazione PUSH BX CALL ins_num POP AX MUL BX JMP fine1 divi: CALL ins_num ;divisione MOV AX,BX CALL ins_num DIV BX fine1: MOV CL,0 sta: MOV DX,0 DIV dieci PUSH DX INC CL CMP AX,0 JNE sta LEA DX,mess_ris MOV AH,09H INT 21H rip: POP DX ADD DL,30H MOV AH,02H INT 21H DEC CL JNZ rip MOV AH,4CH INT 21H CSEG ENDS END START